package com.example.mantenimientovehiculo;

import com.accesoDatos.BDespecifica;
import com.accesoDatos.BaseDatos;
import com.accesoDatos.BaseDatos.ModosBaseDatos;
import com.example.mantenimientovehiculo.repostaje.Repostaje;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
import android.text.format.Time;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.Toast;

public class EntradaRegistro extends Activity {

	BaseDatos bd = BDespecifica.baseDatosMantenimiento(this);

	private int icontadorKilometros = 0;

	public EntradaRegistro() {
		/* TODO Apendice de constructor generado automaticamente */

	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.entrada_registro);

		// evito que el datePicker tenga valores futoros.
		DatePicker dateP = (DatePicker) findViewById(R.id.dpEntradaFecha);

		inicializaDatePicker(dateP);

	}

	@Override
	public void onResume() {
		super.onResume();
		bd.open(ModosBaseDatos.Escritura);
		// Inicializamos las cajas de texto con ultimos valores
		String[] campos = new String[] { "kilometros", "preciolitro" };
		Cursor c = bd.getDatabase().query("historicorepostar", campos, null,
				null, null, null, "fecha desc, kilometros desc", "1");
		// Nos aseguramos de que existe al menos un registro
		EditText etEntradaKilometros = (EditText) findViewById(R.id.etEntradaKilometros);
		EditText etEntradaPrecioLitro = (EditText) findViewById(R.id.etEntradaPrecioLitro);

		if (c.moveToFirst()) {
			etEntradaKilometros.setText(c.getString(0));
			icontadorKilometros = c.getInt(0);
			etEntradaPrecioLitro.setText(c.getString(1));
		} else {
			etEntradaKilometros.setText("0");
			icontadorKilometros = 0;
			etEntradaPrecioLitro.setText("0.0");
		}
		c = null;
		etEntradaKilometros.selectAll();
	}

	@Override
	public void onPause() {
		super.onPause();
		if (bd.getDatabase().isOpen()) {
			bd.close();
		}
		super.onPause();
	}

	@Override
	public void onDestroy() {
		if (bd.getDatabase().isOpen()) {
			bd.close();
		}
		bd = null;
		super.onDestroy();
	}

	public static final void inicializaDatePicker(DatePicker dateP) {
		// evito que el datePicker tenga valores futoros.

		Time now = new Time();
		now.setToNow();
		dateP.init(now.year, now.month, now.monthDay,
				new OnDateChangedListener() {

					@Override
					public void onDateChanged(DatePicker view, int year,
							int monthOfYear, int dayOfMonth) {
						/* TODO Ap�ndice de m�todo generado autom�ticamente */
						Time fechaActual = new Time();
						Time fechaMod = new Time();

						fechaActual.setToNow();
						fechaMod.set(dayOfMonth, monthOfYear, year);

						if (fechaMod.after(fechaActual)) {
							view.updateDate(fechaActual.year,
									fechaActual.month, fechaActual.monthDay);
						}
					}
				});
	}

	public void insertarRegistroRepostar(View view) {
		Boolean bConError = false;

		// Intento recuperar la ultima fecha guardada. Si la fecha es Inferior a
		// la seleccionada,
		// solicita un mensaje de confirmacion.
		String sUltimaFechaGuardada = "10000000";
		String[] campos = new String[] { "fecha" };

		Cursor c = bd.getDatabase().query("historicorepostar", campos, null,
				null, null, null, "fecha desc", "1");
		// Nos aseguramos de que existe al menos un registro
		if (c.moveToFirst()) {
			sUltimaFechaGuardada = c.getString(0);
		}
		c = null;
		Repostaje repos = new Repostaje();
		String sMensajeFecha = "";

		try {
			repos.setsFecha(Repostaje
					.recuperaFecha((DatePicker) findViewById(R.id.dpEntradaFecha)));

			repos.setiKilometros(Integer
					.parseInt(((EditText) findViewById(R.id.etEntradaKilometros))
							.getText().toString()));
			repos.setDblLitros(Double
					.parseDouble(((EditText) findViewById(R.id.etEntradaLitros))
							.getText().toString()));
			repos.setDblPrecio(Double
					.parseDouble(((EditText) findViewById(R.id.etEntradaPrecioLitro))
							.getText().toString()));
			CheckBox miCheck = (CheckBox) findViewById(R.id.ckbEntradaDepositoLleno);
			repos.setbDepositoLleno(miCheck.isChecked());
						

		} catch (NumberFormatException e) {
			// TODO Bloque catch generado autom�ticamente
			Toast.makeText(this, getString(R.string.strDatosIncompletos),
					Toast.LENGTH_LONG).show();
			bConError = true;
			e.printStackTrace();

		}

		if (bConError == false) {
			int iFechaSeleccionada = Integer.parseInt(repos.getsFecha());
			int iFechaUltima = Integer.parseInt(sUltimaFechaGuardada);

			if (iFechaUltima >= iFechaSeleccionada
					|| repos.getiKilometros().compareTo(icontadorKilometros) <= 0) {
				sMensajeFecha = "";
				if (repos.getiKilometros().compareTo(icontadorKilometros) == 0) {
					sMensajeFecha = getString(R.string.strMismosKmUltimaVez);
				} else if (repos.getiKilometros()
						.compareTo(icontadorKilometros) < 0) {
					sMensajeFecha = getString(R.string.strMenosKmUltimaVez);
				}
				if (iFechaUltima > iFechaSeleccionada) {
					if (sMensajeFecha != "") {
						sMensajeFecha += "\n Ademas, ";
					}
					sMensajeFecha += getString(R.string.strFechaIntroducidaEsAntigua);
				} else if (iFechaUltima == iFechaSeleccionada) {
					if (sMensajeFecha != "") {
						sMensajeFecha += "\n Ademas, ";
					}
					sMensajeFecha += getString(R.string.strFechaIntroducidaYaExiste);
				}
				sMensajeFecha += "\n\n"
						+ getString(R.string.strConfirmacionGuardar);
				Dialog confirmacion = crearDialogoConfirmacion(sMensajeFecha,
						repos);
				confirmacion.show();

			} else {

				guardaRegistroRespostar(repos);

			}
		}
	}

	private Dialog crearDialogoConfirmacion(String mensaje,
			final Repostaje miRepos) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);

		builder.setTitle(getString(R.string.strTituloAlertConfirmacion));
		builder.setMessage(mensaje);
		builder.setPositiveButton(getString(R.string.btnAceptar),
				new OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						guardaRegistroRespostar(miRepos);

						dialog.cancel();
					}
				});
		builder.setNegativeButton(getString(R.string.btnCancelar),
				new OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});

		return builder.create();
	}

	private void guardaRegistroRespostar(Repostaje miRepos) {
		if (bd != null) {
			ContentValues nuevoRegistro = new ContentValues();
			nuevoRegistro.put("fecha", miRepos.getsFecha());
			nuevoRegistro.put("kilometros", miRepos.getiKilometros());
			nuevoRegistro.put("litros", miRepos.getDblLitros());
			nuevoRegistro.put("preciolitro", miRepos.getDblPrecio());
			nuevoRegistro.put("deposito_lleno", miRepos.getiDepositoLleno());
			bd.getDatabase().insert("historicorepostar", null, nuevoRegistro);

			Toast.makeText(this, getString(R.string.strGuardadoOk),
					Toast.LENGTH_LONG).show();
		}
	}

	/** Menus de la activity */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.entrada_registro, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.mnuRepostajeHistorial:
			Intent i = new Intent(this, HistorialRepostage.class);
			startActivity(i);
			return true;
		}

		return false;
	}

}
